package net.vidmar.tvspored;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.os.Environment;
import android.util.Log;

public class FileManager {

	private final String PATH = "/TVvSPOREDnik/";
	
	private String MY_DEBUG_TAG = "TVvSPOREDnik";
	
	public void DownloadFromUrl(String urlToDownload, String fileName) throws IOException { 
	
		try {  
		    URL url = new URL(urlToDownload);  
		  
		    //create the new connection  
		    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();  
		  
		    //set up some things on the connection  
		    urlConnection.setRequestMethod("GET");  
		    urlConnection.setDoOutput(true);  
		  
		    //and connect!  
		    urlConnection.connect();  
		  
		    //set the path where we want to save the file  
		    //in this case, going to save it on the root directory of the  
		    //sd card.  
		    File SDCardRoot = Environment.getExternalStorageDirectory();  
		    //create a new file, specifying the path, and the filename  
		    //which we want to save the file as.  
		    
		    File directory = new File(SDCardRoot.getPath() + PATH);
		    if (!directory.exists()) directory.mkdirs();
		    
		    File file = new File(directory, "xmltv.xml");  
		  
		    //this will be used to write the downloaded data into the file we created  
		    FileOutputStream fileOutput = new FileOutputStream(file);  
		  
		    //this will be used in reading the data from the internet  
		    InputStream inputStream = urlConnection.getInputStream();  
		  
		    //this is the total size of the file  
		    int totalSize = urlConnection.getContentLength();  
		    //variable to store total downloaded bytes  
		    int downloadedSize = 0;  
		  
		    //create a buffer...  
		    byte[] buffer = new byte[10240];  
		    int bufferLength = 0; //used to store a temporary size of the buffer  
		  
		    //now, read through the input buffer and write the contents to the file  
		    while ( (bufferLength = inputStream.read(buffer)) > 0 ) {  
		        //add the data in the buffer to the file in the file output stream (the file on the sd card  
		        fileOutput.write(buffer, 0, bufferLength);  
		        //add up the size so we know how much is downloaded  
		        downloadedSize += bufferLength;  
		        //this is where you would do something to report the prgress, like this maybe  
		        updateProgress(downloadedSize, totalSize);  
		  
		    }  
		    //close the output stream when done  
		    fileOutput.close();  
		  
		//catch some possible errors...  
		} catch (MalformedURLException e) {  
		    Log.d(MY_DEBUG_TAG, e.getMessage());
		} catch (IOException e) {  
			Log.d(MY_DEBUG_TAG, e.getMessage());  
		}  
	}
	
	private void updateProgress(int downloaded, int total)
	{
		Log.d(MY_DEBUG_TAG, String.format("%s/%s", downloaded, total));
	}
	
}